Skip to content

Conversation

@pkarveti
Copy link
Contributor

@pkarveti pkarveti commented Jul 8, 2025

No description provided.

@llvmbot
Copy link
Member

llvmbot commented Jul 8, 2025

@llvm/pr-subscribers-backend-hexagon

Author: None (pkarveti)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/147476.diff

2 Files Affected:

  • (modified) llvm/lib/Target/Hexagon/HexagonPatterns.td (+7)
  • (modified) llvm/test/CodeGen/Hexagon/isel/trunc-vNi1.ll (+51)
diff --git a/llvm/lib/Target/Hexagon/HexagonPatterns.td b/llvm/lib/Target/Hexagon/HexagonPatterns.td
index 2a991bafbf148..4d15cfa651270 100644
--- a/llvm/lib/Target/Hexagon/HexagonPatterns.td
+++ b/llvm/lib/Target/Hexagon/HexagonPatterns.td
@@ -582,6 +582,13 @@ def: Pat<(v8i1 (trunc V8I8:$Rs)),
          (A4_vcmpbeqi (Combinew (A2_andir (HiReg $Rs), (i32 0x01010101)),
                                 (A2_andir (LoReg $Rs), (i32 0x01010101))),
                       (i32 1))>;
+def : Pat<(v4i1 (trunc V4I8:$Rs)),
+          (A4_vcmpheqi (Combinew (A2_andir (HiReg (S2_vzxtbh $Rs)), 0x00010001),
+                                 (A2_andir (LoReg (S2_vzxtbh $Rs)), 0x00010001)),
+                       (i32 1))>;
+def: Pat<(v2i1 (trunc V2I16:$Rs)),
+          (A4_vcmpweqi (A2_andp (S2_vzxthw $Rs), (A2_combineii (i32 1), (i32 1))),
+                      (i32 1))>;
 
 
 // Saturation:
diff --git a/llvm/test/CodeGen/Hexagon/isel/trunc-vNi1.ll b/llvm/test/CodeGen/Hexagon/isel/trunc-vNi1.ll
index 1090b64fcad52..d43b539ab3269 100644
--- a/llvm/test/CodeGen/Hexagon/isel/trunc-vNi1.ll
+++ b/llvm/test/CodeGen/Hexagon/isel/trunc-vNi1.ll
@@ -1,5 +1,6 @@
 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
 ; RUN: llc -mtriple=hexagon < %s | FileCheck %s
+; RUN: llc --mtriple=hexagon -mattr=+hvxv79,+hvx-length128b < %s | FileCheck %s
 
 define void @f0(<2 x i32> %a0, ptr %a1) {
 ; CHECK-LABEL: f0:
@@ -68,3 +69,53 @@ b0:
   store <8 x i1> %v0, ptr %a1, align 1
   ret void
 }
+
+define void @f3(<4 x i8> %a0, ptr %a1) {
+; CHECK-LABEL: f3:
+; CHECK:         .cfi_startproc
+; CHECK-NEXT:  // %bb.0: // %b0
+; CHECK-NEXT:    {
+; CHECK-NEXT:     r3:2 = vzxtbh(r0)
+; CHECK-NEXT:    }
+; CHECK-NEXT:    {
+; CHECK-NEXT:     r2 = and(r2,##65537)
+; CHECK-NEXT:     r3 = and(r3,##65537)
+; CHECK-NEXT:    }
+; CHECK-NEXT:    {
+; CHECK-NEXT:     p0 = vcmph.eq(r3:2,#1)
+; CHECK-NEXT:    }
+; CHECK-NEXT:    {
+; CHECK-NEXT:     r2 = p0
+; CHECK-NEXT:     jumpr r31
+; CHECK-NEXT:     memb(r1+#0) = r2.new
+; CHECK-NEXT:    }
+b0:
+  %v0 = trunc <4 x i8> %a0 to <4 x i1>
+  store <4 x i1> %v0, ptr %a1, align 1
+  ret void
+}
+
+define void @f4(<2 x i16> %a0, ptr %a1) {
+; CHECK-LABEL: f4:
+; CHECK:         .cfi_startproc
+; CHECK-NEXT:  // %bb.0: // %b0
+; CHECK-NEXT:    {
+; CHECK-NEXT:     r3:2 = vzxthw(r0)
+; CHECK-NEXT:     r5:4 = combine(#1,#1)
+; CHECK-NEXT:    }
+; CHECK-NEXT:    {
+; CHECK-NEXT:     r3:2 = and(r3:2,r5:4)
+; CHECK-NEXT:    }
+; CHECK-NEXT:    {
+; CHECK-NEXT:     p0 = vcmpw.eq(r3:2,#1)
+; CHECK-NEXT:    }
+; CHECK-NEXT:    {
+; CHECK-NEXT:     r2 = p0
+; CHECK-NEXT:     jumpr r31
+; CHECK-NEXT:     memb(r1+#0) = r2.new
+; CHECK-NEXT:    }
+b0:
+  %v0 = trunc <2 x i16> %a0 to <2 x i1>
+  store <2 x i1> %v0, ptr %a1, align 1
+  ret void
+}

@pkarveti
Copy link
Contributor Author

pkarveti commented Jul 8, 2025

@aankit-ca @androm3da Could you please review this patch?

Copy link
Contributor

@aankit-ca aankit-ca left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you update the tests to be more robust? LGTM otherwise

Comment on lines 78 to 90
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test is very brittle. Just check what needs to be checked. Use these kind of checks:

; CHECK: [[REG1:r([0-9]+)]] = and(r{{[0-9]*}}, ##65537)\

Change-Id: Id1c25dfbaf95a56b687eb6e47d2e48c8fe84deaf
@aankit-ca aankit-ca merged commit d679dc7 into llvm:main Jul 11, 2025
9 checks passed
@llvm-ci
Copy link
Collaborator

llvm-ci commented Jul 12, 2025

LLVM Buildbot has detected a new failure on builder llvm-x86_64-debian-dylib running on gribozavr4 while building llvm at step 6 "test-build-unified-tree-check-clang".

Full details are available at: https://lab.llvm.org/buildbot/#/builders/60/builds/32701

Here is the relevant piece of the build log for the reference
Step 6 (test-build-unified-tree-check-clang) failure: test (failure)
******************** TEST 'Clang :: Analysis/exploded-graph-rewriter/objects_under_construction.cpp' FAILED ********************
Exit Code: 1

Command Output (stdout):
--
# RUN: at line 1
/b/1/llvm-x86_64-debian-dylib/build/bin/clang -cc1 -internal-isystem /b/1/llvm-x86_64-debian-dylib/build/lib/clang/21/include -nostdsysteminc -analyze -setup-static-analyzer -std=c++14 -triple x86_64-unknown-linux-gnu                     -analyze-function "test()"                     -analyzer-checker=core                     -analyzer-dump-egraph=/b/1/llvm-x86_64-debian-dylib/build/tools/clang/test/Analysis/exploded-graph-rewriter/Output/objects_under_construction.cpp.tmp.dot /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/test/Analysis/exploded-graph-rewriter/objects_under_construction.cpp
# executed command: /b/1/llvm-x86_64-debian-dylib/build/bin/clang -cc1 -internal-isystem /b/1/llvm-x86_64-debian-dylib/build/lib/clang/21/include -nostdsysteminc -analyze -setup-static-analyzer -std=c++14 -triple x86_64-unknown-linux-gnu -analyze-function 'test()' -analyzer-checker=core -analyzer-dump-egraph=/b/1/llvm-x86_64-debian-dylib/build/tools/clang/test/Analysis/exploded-graph-rewriter/Output/objects_under_construction.cpp.tmp.dot /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/test/Analysis/exploded-graph-rewriter/objects_under_construction.cpp
# .---command stderr------------
# | writing to the newly created file /b/1/llvm-x86_64-debian-dylib/build/tools/clang/test/Analysis/exploded-graph-rewriter/Output/objects_under_construction.cpp.tmp.dot
# |  done. 
# `-----------------------------
# RUN: at line 5
'/usr/bin/python3.9' /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/utils/analyzer/exploded-graph-rewriter.py --dump-dot-only /b/1/llvm-x86_64-debian-dylib/build/tools/clang/test/Analysis/exploded-graph-rewriter/Output/objects_under_construction.cpp.tmp.dot | /b/1/llvm-x86_64-debian-dylib/build/bin/FileCheck /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/test/Analysis/exploded-graph-rewriter/objects_under_construction.cpp
# executed command: /usr/bin/python3.9 /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/utils/analyzer/exploded-graph-rewriter.py --dump-dot-only /b/1/llvm-x86_64-debian-dylib/build/tools/clang/test/Analysis/exploded-graph-rewriter/Output/objects_under_construction.cpp.tmp.dot
# executed command: /b/1/llvm-x86_64-debian-dylib/build/bin/FileCheck /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/test/Analysis/exploded-graph-rewriter/objects_under_construction.cpp
# .---command stderr------------
# | /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/test/Analysis/exploded-graph-rewriter/objects_under_construction.cpp:22:17: error: CHECK-SAME: is not on the same line as the previous match
# |  // CHECK-SAME: (materialize temporary)
# |                 ^
# | <stdin>:16:1367: note: 'next' match was here
# | Node0xfffa60 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 87</b></td></tr><tr><td align="left" width="0"><b>Program points:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">4.</td><td align="left" width="0">objects_under_construction.cpp:<b>43</b>:<b>9</b>:</td><td align="left" width="0"><font color="cyan4">CXXTemporaryObjectExpr</font> </td><td align="left"><i>S876</i></td><td align="left"><font color="cyan3">PreStmt</font></td><td align="left">S()</td></tr><tr><td width="0"></td><td width="0"></td><td colspan="3" align="left"><b>Tag: </b> <font color="crimson">ExprEngine : Prepare for object construction</font></td></tr><tr><td align="left">5.</td><td align="left" width="0">objects_under_construction.cpp:<b>43</b>:<b>9</b>:</td><td align="left" width="0"><font color="cyan4">CXXTemporaryObjectExpr</font> </td><td align="left"><i>S876</i></td><td align="left"><font color="cyan3">PreStmt</font></td><td align="left">S()</td></tr></table></td></tr><hr /><tr><td align="left"><b>Objects Under Construction: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S920</i></td><td align="left"><font color="darkgreen"><i>(materialize temporary)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S933</i></td><td align="left"><font color="darkgreen"><i>(elide constructor)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S942</i></td><td align="left"><font color="darkgreen"><i>(construct into local variable)</i></font></td><td align="left">S s = S();</td><td align="left">&amp;s</td></tr></table></td></tr></table>>];
# |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       ^
# | <stdin>:3:1792: note: previous match ended here
# | Node0x10000a8 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 363</b></td></tr><tr><td align="left" width="0"><b>Program point:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">10.</td><td align="left" width="0">objects_under_construction.cpp:<b>43</b>:<b>9</b>:</td><td align="left" width="0"><font color="cyan4">MaterializeTemporaryExpr</font> </td><td align="left"><i>S920</i></td><td align="left"><font color="cyan3">PostStmt</font></td><td align="left">S()</td></tr></table></td></tr><hr /><tr><td align="left"><b>Store: </b> <font color="gray">(0xfffc38)</font></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left">this</td><td align="left">0</td><td align="left"></td><td align="left">&amp;s</td></tr></table></td></tr><hr /><tr><td align="left"><b>Expressions: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S876</i></td><td align="left"><font color="darkgreen"><i>(CXXTemporaryObjectExpr)</i></font></td><td align="left">S()</td><td align="left">lazyCompoundVal\{0xfffc38,s\}</td></tr><tr><td></td><td align="left"><i>S920</i></td><td align="left"><font color="darkgreen"><i>(MaterializeTemporaryExpr)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr></table></td></tr><hr /><tr><td align="left"><b>Objects Under Construction: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S933</i></td><td align="left"><font color="darkgreen"><i>(elide constructor)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S942</i></td><td align="left"><font color="darkgreen"><i>(construct into local variable)</i></font></td><td align="left">S s = S();</td><td align="left">&amp;s</td></tr></table></td></tr></table>>];
# |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ^
# | 
# | Input file: <stdin>
# | Check file: /b/1/llvm-x86_64-debian-dylib/llvm-project/clang/test/Analysis/exploded-graph-rewriter/objects_under_construction.cpp
# | 
# | -dump-input=help explains the following input dump.
# | 
# | Input was:
# | <<<<<<
# |          .
# |          .
# |          .
# |         11: Node0x10004b0 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 492</b></td></tr><tr><td align="left" width="0"><b>Program points:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">14.</td><td align="left" width="0">objects_under_construction.cpp:<b>43</b>:<b>3</b>:</td><td align="left" width="0"><font color="cyan4">DeclStmt</font> </td><td align="left"><i>S942</i></td><td align="left"><font color="cyan3">PostStmt</font></td><td align="left">S s = S();</td></tr><tr><td align="left">15.</td><td width="0"></td><td align="left" width="0"><font color="gold3">BlockEdge</font></td><td align="left">[B1] -&gt; [B0]</td></tr></table></td></tr><hr /><tr><td align="left"><b>Expressions: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S933</i></td><td align="left"><font color="darkgreen"><i>(CXXConstructExpr)</i></font></td><td align="left">S()</td><td align="left">lazyCompoundVal\{0x0,s\}</td></tr></table></td></tr></table>>]; 
# |         12: Node0x10004b0 -> Node0x1008018; 
# |         13: Node0x1008018 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 523</b></td></tr><tr><td align="left" width="0"><b>Program point:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">16.</td><td align="left" width="0">objects_under_construction.cpp:<b>11</b>:<b>13</b>:</td><td align="left" width="0"><font color="cyan4">CompoundStmt</font> </td><td align="left"><i>S945</i></td><td align="left"><font color="cyan3">PostStmtPurgeDeadSymbols</font></td><td align="left"></td></tr><tr><td width="0"></td><td width="0"></td><td colspan="3" align="left"><b>Tag: </b> <font color="crimson">ExprEngine : Clean Node</font></td></tr></table></td></tr></table>>]; 
# |         14: Node0xfff550 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 0</b></td></tr><tr><td align="left" width="0"><b>Program points:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">1.</td><td width="0"></td><td align="left" width="0"><font color="gold3">BlockEdge</font></td><td align="left">[B2] -&gt; [B1]</td></tr><tr><td align="left">2.</td><td width="0"></td><td align="left" width="0"><font color="gold3">BlockEntrance</font></td><td align="left">[B1]</td></tr><tr><td align="left">3.</td><td align="left" width="0">objects_under_construction.cpp:<b>43</b>:<b>9</b>:</td><td align="left" width="0"><font color="cyan4">CXXTemporaryObjectExpr</font> </td><td align="left"><i>S876</i></td><td align="left"><font color="cyan3">PreStmtPurgeDeadSymbols</font></td><td align="left"></td></tr><tr><td width="0"></td><td width="0"></td><td colspan="3" align="left"><b>Tag: </b> <font color="crimson">ExprEngine : Clean Node</font></td></tr></table></td></tr></table>>]; 
# |         15: Node0xfff550 -> Node0xfffa60; 
# |         16: Node0xfffa60 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 87</b></td></tr><tr><td align="left" width="0"><b>Program points:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">4.</td><td align="left" width="0">objects_under_construction.cpp:<b>43</b>:<b>9</b>:</td><td align="left" width="0"><font color="cyan4">CXXTemporaryObjectExpr</font> </td><td align="left"><i>S876</i></td><td align="left"><font color="cyan3">PreStmt</font></td><td align="left">S()</td></tr><tr><td width="0"></td><td width="0"></td><td colspan="3" align="left"><b>Tag: </b> <font color="crimson">ExprEngine : Prepare for object construction</font></td></tr><tr><td align="left">5.</td><td align="left" width="0">objects_under_construction.cpp:<b>43</b>:<b>9</b>:</td><td align="left" width="0"><font color="cyan4">CXXTemporaryObjectExpr</font> </td><td align="left"><i>S876</i></td><td align="left"><font color="cyan3">PreStmt</font></td><td align="left">S()</td></tr></table></td></tr><hr /><tr><td align="left"><b>Objects Under Construction: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S920</i></td><td align="left"><font color="darkgreen"><i>(materialize temporary)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S933</i></td><td align="left"><font color="darkgreen"><i>(elide constructor)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S942</i></td><td align="left"><font color="darkgreen"><i>(construct into local variable)</i></font></td><td align="left">S s = S();</td><td align="left">&amp;s</td></tr></table></td></tr></table>>]; 
# | same:22                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           !~~~~~~~~~~~~~~~~~~~~~~                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          error: match on wrong line
# |         17: Node0xfffa60 -> Node0xfffc80; 
# |         18: Node0xfffc80 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 126</b></td></tr><tr><td align="left" width="0"><b>Program points:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">6.</td><td width="0"></td><td align="left" width="0"><font color="blue">CallEnter</font></td><td align="left">S::S()</td></tr><tr><td align="left">7.</td><td width="0"></td><td align="left" width="0"><font color="gold3">BlockEdge</font></td><td align="left">[B1] -&gt; [B0]</td></tr><tr><td align="left">8.</td><td width="0"></td><td align="left" width="0" colspan="2"><font color="blue">CallExitBegin</font></td></tr></table></td></tr><hr /><tr><td align="left"><b>Store: </b> <font color="gray">(0xfffc38)</font></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left">this</td><td align="left">0</td><td align="left"></td><td align="left">&amp;s</td></tr></table></td></tr><hr /><tr><td align="left"><b>Objects Under Construction: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S920</i></td><td align="left"><font color="darkgreen"><i>(materialize temporary)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S933</i></td><td align="left"><font color="darkgreen"><i>(elide constructor)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S942</i></td><td align="left"><font color="darkgreen"><i>(construct into local variable)</i></font></td><td align="left">S s = S();</td><td align="left">&amp;s</td></tr></table></td></tr></table>>]; 
# |         19: Node0xfffc80 -> Node0xfffe38; 
# |         20: Node0xfffe38 [shape=record,label=<<table border="0"><tr><td bgcolor="gray70"><b>State 285</b></td></tr><tr><td align="left" width="0"><b>Program point:</b></td></tr><tr><td align="left" width="0"><table border="0" align="left" width="0"><tr><td align="left">9.</td><td width="0"></td><td align="left" width="0" colspan="2"><font color="blue">CallExitEnd</font></td></tr></table></td></tr><hr /><tr><td align="left"><b>Store: </b> <font color="gray">(0xfffc38)</font></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left">this</td><td align="left">0</td><td align="left"></td><td align="left">&amp;s</td></tr></table></td></tr><hr /><tr><td align="left"><b>Expressions: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S876</i></td><td align="left"><font color="darkgreen"><i>(CXXTemporaryObjectExpr)</i></font></td><td align="left">S()</td><td align="left">lazyCompoundVal\{0xfffc38,s\}</td></tr></table></td></tr><hr /><tr><td align="left"><b>Objects Under Construction: </b></td></tr><tr><td align="left"><table border="0"><tr><td></td><td align="left"><b>#0 Call</b></td><td align="left" colspan="2"><font color="gray60">test </font></td></tr><tr><td></td><td align="left"><i>S920</i></td><td align="left"><font color="darkgreen"><i>(materialize temporary)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S933</i></td><td align="left"><font color="darkgreen"><i>(elide constructor)</i></font></td><td align="left">S()</td><td align="left">&amp;s</td></tr><tr><td></td><td align="left"><i>S942</i></td><td align="left"><font color="darkgreen"><i>(construct into local variable)</i></font></td><td align="left">S s = S();</td><td align="left">&amp;s</td></tr></table></td></tr></table>>]; 
# |         21: Node0xfffe38 -> Node0x10000a8; 
# |         22: } 
...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants